home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Games / MacGnuGo 0.5e / gnugo.src / patterns.1 < prev    next >
Encoding:
Text File  |  1993-10-23  |  8.0 KB  |  480 lines  |  [TEXT/R*ch]

  1. #include "comment.header"
  2.  
  3. #define EMPTY    0
  4. #define MOVE    3
  5. #define EDGE    4
  6. #define PATNO    32
  7.  
  8. /* pattern x, y coor and attribute */
  9. /* for each pattern coordinate 0,0 must have my piece */
  10. /* att = 0 - empty, 1 - your piece, 2 - my piece, 3 - my next move */
  11. /* 4 - empty on edge, 5 - your piece on edge, 6 - my piece on edge */
  12. /* 7 - not my piece, 8 - not your piece */
  13. /*
  14.   struct patval {int x, y, att;};
  15.   */
  16.  
  17. /* patn - patern */
  18. /* patlen - no. of pieces in pattern */
  19. /* trfno - no. of transformation to match pattern */
  20. /*       8 for normal pattern, 4 for symmetrical pattern */
  21. /* patwt - pattern value */
  22. /*
  23.   struct pattern {
  24.   struct patval patn[MAXPC];
  25.   int patlen, trfno, patwt;
  26.   };
  27.   */
  28. static struct pattern pat[PATNO] = {
  29.   /*
  30.     pattern 0:
  31.     232   connect if invaded
  32.     010
  33.     */
  34.   {{{0, 0, 2},
  35.     {0, 1, EMPTY},
  36.     {1, 0, MOVE},
  37.     {1, 1, 1},
  38.     {2, 0, 2},
  39.     {2, 1, EMPTY}}, 6, 4, 82},
  40.   /*
  41.     pattern 1:
  42.     230   connect if invaded
  43.     012
  44.     */
  45.   {{{0, 0, 2},
  46.     {0, 1, EMPTY},
  47.     {1, 0, MOVE},
  48.     {1, 1, 1},
  49.     {2, 0, EMPTY},
  50.     {2, 1, 2}}, 6, 8, 82},
  51.   /*
  52.     pattern 2:
  53.     212   try to attack
  54.     030
  55.     */
  56.   {{{0, 0, 2},
  57.     {0, 1, EMPTY},
  58.     {1, 0, 1},
  59.     {1, 1, MOVE},
  60.     {2, 0, 2},
  61.     {2, 1, EMPTY}}, 6, 4, 0},    /* should not attack if 1 has liberties */
  62.   /*
  63.     pattern 3:
  64.     2302   connect if invaded
  65.     0100
  66.     */
  67.   {{{0, 0, 2},
  68.     {0, 1, EMPTY},
  69.     {1, 0, MOVE},
  70.     {1, 1, 1},
  71.     {2, 0, EMPTY},
  72.     {2, 1, EMPTY},
  73.     {3, 0, 2},
  74.     {3, 1, EMPTY}},8, 8, 83},
  75.   /*
  76.     pattern 4:
  77.     20302   connect if invaded
  78.     00100
  79.     */
  80.   {{{0, 0, 2},
  81.     {0, 1, EMPTY},
  82.     {1, 0, EMPTY},
  83.     {1, 1, EMPTY},
  84.     {2, 0, MOVE},
  85.     {2, 1, 1},
  86.     {3, 0, EMPTY},
  87.     {3, 1, EMPTY},
  88.     {4, 0, 2},
  89.     {4, 1, EMPTY}}, 10, 4, 84},
  90.   /*
  91.     pattern 5:
  92.     203   form eye to protect
  93.     021
  94.     */
  95.   {{{0, 0, 2},
  96.     {0, 1, EMPTY},
  97.     {1, 0, EMPTY},
  98.     {1, 1, 2},
  99.     {2, 0, MOVE},
  100.     {2, 1, 1}}, 6, 8, 82},
  101.   /*
  102.     pattern 6:
  103.     202    form eye to protect
  104.     031
  105.     */
  106.   {{{0, 0, 2},
  107.     {0, 1, EMPTY},
  108.     {1, 0, EMPTY},
  109.     {1, 1, MOVE},
  110.     {2, 0, 2},
  111.     {2, 1, 1}}, 6, 8, 82},
  112.   /*
  113.     pattern 7:
  114.     230   connect if invaded
  115.     102
  116.     */
  117.   {{{0, 0, 2},
  118.     {0, 1, 1},
  119.     {1, 0, MOVE},
  120.     {1, 1, EMPTY},
  121.     {2, 0, EMPTY},
  122.     {2, 1, 2}}, 6, 8, 82},
  123.   /*
  124.     pattern 8:
  125.     200000
  126.     00030  extend
  127.     00000
  128.     */
  129.   {{{0, 0, 2},
  130.     {1, 0, EMPTY},
  131.     {2, 0, EMPTY},
  132.     {3, 0, EMPTY},
  133.     {4, 0, EMPTY},
  134.     {5, 0, EMPTY},
  135.     {1, 1, EMPTY},
  136.     {2, 1, EMPTY},
  137.     {3, 1, EMPTY},
  138.     {4, 1, MOVE},
  139.     {5, 1, EMPTY},
  140.     {1, 2, EMPTY},
  141.     {2, 2, EMPTY},
  142.     {3, 2, EMPTY},
  143.     {4, 2, EMPTY},
  144.     {5, 2, EMPTY}}, 16, 8, 80},
  145.   /*
  146.     pattern 9:
  147.     2
  148.    000
  149.    000  extend
  150.    000
  151.    030
  152.    000
  153.     */
  154.   {{{ 0, 0, 2},
  155.     {-1, 1, EMPTY},
  156.     { 0, 1, EMPTY},
  157.     { 1, 1, EMPTY},
  158.     {-1, 2, EMPTY},
  159.     { 0, 2, EMPTY},
  160.     { 1, 2, EMPTY},
  161.     {-1, 3, EMPTY},
  162.     { 0, 3, EMPTY},
  163.     { 1, 3, EMPTY},
  164.     {-1, 4, EMPTY},
  165.     { 0, 4, MOVE},
  166.     { 1, 4, EMPTY},
  167.     {-1, 5, EMPTY},
  168.     { 0, 5, EMPTY},
  169.     { 1, 5, EMPTY}}, 16, 4, 80},
  170.   /*
  171.     pattern 10:
  172.     20000
  173.     0030  extend
  174.     0000
  175.     */
  176.   {{{0, 0, 2},
  177.     {1, 0, EMPTY},
  178.     {2, 0, EMPTY},
  179.     {3, 0, EMPTY},
  180.     {4, 0, EMPTY},
  181.     {1, 1, EMPTY},
  182.     {2, 1, EMPTY},
  183.     {3, 1, MOVE},
  184.     {4, 1, EMPTY},
  185.     {1, 2, EMPTY},
  186.     {2, 2, EMPTY},
  187.     {3, 2, EMPTY},
  188.     {4, 2, EMPTY}}, 13, 8, 79},
  189.   /*
  190.     pattern 11:
  191.      2
  192.     000
  193.     000  extend
  194.     030
  195.     000
  196.     */
  197.   {{{ 0, 0, 2},
  198.     {-1, 1, EMPTY},
  199.     { 0, 1, EMPTY},
  200.     { 1, 1, EMPTY},
  201.     {-1, 2, EMPTY},
  202.     { 0, 2, EMPTY},
  203.     { 1, 2, EMPTY},
  204.     {-1, 3, EMPTY},
  205.     { 0, 3, MOVE},
  206.     { 1, 3, EMPTY},
  207.     {-1, 4, EMPTY},
  208.     { 0, 4, EMPTY},
  209.     { 1, 4, EMPTY}}, 13, 4, 79},
  210.   /*
  211.     pattern 12:
  212.     2000
  213.      030  extend
  214.      000
  215.     */
  216.   {{{0, 0, 2},
  217.     {1, 0, EMPTY},
  218.     {2, 0, EMPTY},
  219.     {3, 0, EMPTY},
  220.     {1, 1, EMPTY},
  221.     {2, 1, MOVE},
  222.     {3, 1, EMPTY},
  223.     {1, 2, EMPTY},
  224.     {2, 2, EMPTY},
  225.     {3, 2, EMPTY}}, 10, 8, 76},
  226.   /*
  227.     pattern 13:
  228.     2
  229.    000  extend
  230.    030
  231.    000
  232.     */
  233.   {{{ 0, 0, 2},
  234.     {-1, 1, EMPTY},
  235.     { 0, 1, EMPTY},
  236.     { 1, 1, EMPTY},
  237.     {-1, 2, EMPTY},
  238.     { 0, 2, MOVE},
  239.     { 1, 2, EMPTY},
  240.     {-1, 3, EMPTY},
  241.     { 0, 3, EMPTY},
  242.     { 1, 3, EMPTY}}, 10, 4, 76},
  243.   /*
  244.     pattern 14:
  245.     643   form eye on the edge
  246.      20
  247.     */
  248.   {{{0, 0, 6},
  249.     {1, 0, EDGE},
  250.     {1, 1, 2},
  251.     {2, 0, MOVE},
  252.     {2, 1, EMPTY}}, 5, 8, 0},    /* not unless attacked */
  253.   /*
  254.     pattern 15:
  255.     646    solidify eye on the edge
  256.      231
  257.     */
  258.   {{{0, 0, 6},
  259.     {1, 0, EDGE},
  260.     {1, 1, 2},
  261.     {2, 0, 6},
  262.     {2, 1, MOVE},
  263.     {3, 1, 1}}, 6, 8, 75},
  264.   /*
  265.     pattern 16:
  266.     646    solidify eye on the edge
  267.      230
  268.       1
  269.     */
  270.   {{{0, 0, 6},
  271.     {1, 0, EDGE},
  272.     {1, 1, 2},
  273.     {2, 0, 6},
  274.     {2, 1, MOVE},
  275.     {2, 2, 1},
  276.     {3, 1, EMPTY}}, 7, 8, 75},
  277.   /*
  278.     pattern 17:
  279.     646    solidify eye on the edge
  280.     230
  281.     0
  282.     */
  283.   {{{0, 0, 6},
  284.     {1, 0, EDGE},
  285.     {1, 1, 2},
  286.     {2, 0, 6},
  287.     {2, 1, MOVE},
  288.     {2, 2, EMPTY},
  289.     {3, 1, EMPTY}}, 7, 8, 0},    /* not unless attacked */
  290.   /*
  291.     pattern 18:
  292.      2       form eye on center
  293.     202
  294.      3
  295.     */
  296.   {{{0, 0, 2},
  297.     {-1, 1, 2},
  298.     {0, 1, EMPTY},
  299.     {1, 1, 2},
  300.     {0, 2, MOVE}}, 5, 4, 80},
  301.   /*
  302.     pattern 19:
  303.     2       solidify eye on center
  304.     202
  305.     231
  306.     */
  307.   {{{0, 0, 2},
  308.     {-1, 1, 2},
  309.     {0, 1, EMPTY},
  310.     {1, 1, 2},
  311.     {0, 2, 2},
  312.     {1, 2, MOVE},
  313.     {2, 2, 1}}, 7, 8, 75},
  314.   /*
  315.     pattern 20:
  316.     2       solidify eye on center
  317.    202
  318.     230
  319.     0
  320.     */
  321.   {{{0, 0, 2},
  322.     {-1, 1, 2},
  323.     {0, 1, EMPTY},
  324.     {1, 1, 2},
  325.     {0, 2, 2},
  326.     {1, 2, MOVE},
  327.     {2, 2, EMPTY},
  328.     {1, 3, EMPTY}}, 8, 8, 75},
  329.   /*
  330.     pattern 21:
  331.     2      solidify eye on center
  332.    202
  333.     230
  334.     1
  335.     */
  336.   {{{0, 0, 2},
  337.     {-1, 1, 2},
  338.     {0, 1, EMPTY},
  339.     {1, 1, 2},
  340.     {0, 2, 2},
  341.     {1, 2, MOVE},
  342.     {2, 2, EMPTY},
  343.     {1, 3, 1}}, 8, 8, 75},
  344.   /*
  345.     pattern 22:
  346.      21        make wall ???
  347.     031
  348.     */
  349.   {{{0, 0, 2},
  350.     {1, 0, 1},
  351.     {-1, 1, 0},
  352.     {0, 1, MOVE},
  353.     {2, 1, 1}}, 5, 8, 74},
  354.   /*
  355.     pattern 23:
  356.     20100     connect if invaded
  357.     00302
  358.     */
  359.   {{{0, 0, 2},
  360.     {0, 1, EMPTY},
  361.     {1, 0, EMPTY},
  362.     {1, 1, EMPTY},
  363.     {2, 0, 1},
  364.     {2, 1, MOVE},
  365.     {3, 0, EMPTY},
  366.     {3, 1, EMPTY},
  367.     {4, 0, EMPTY},
  368.     {4, 1, 2}}, 10, 8, 84},
  369.   /*
  370.     pattern 24:
  371.     2100    connect if invaded
  372.     0302
  373.     */
  374.   {{{0, 0, 2},
  375.     {0, 1, EMPTY},
  376.     {1, 0, 1},
  377.     {1, 1, MOVE},
  378.     {2, 0, EMPTY},
  379.     {2, 1, EMPTY},
  380.     {3, 0, EMPTY},
  381.     {3, 1, 2}}, 10, 8, 83},
  382.   /*
  383.     pattern 25:
  384.     2    block near edge ???
  385.    031
  386.    444
  387.     */
  388.   {{{0, 0, 2},
  389.     {-1, 1, EMPTY},
  390.     {0, 1, MOVE},
  391.     {1, 1, 1},
  392.     {-1, 2, EDGE},
  393.     {0, 2, EDGE},
  394.     {1, 2, EDGE}}, 7, 8, 76},
  395.   /*
  396.     pattern 26:
  397.     21    block on edge    ??? ???
  398.     434
  399.     */
  400.   {{{0, 0, 2},
  401.     {1, 0, 1},
  402.     {0, 1, EDGE},
  403.     {1, 1, MOVE},
  404.     {2, 1, EDGE}}, 5, 8, 70},
  405.   /*
  406.     pattern 27:
  407.     2    block on edge ??? ???
  408.    435
  409.     */
  410.   {{{0, 0, 2},
  411.     {-1, 1, EDGE},
  412.     {0, 1, MOVE},
  413.     {1, 1, 5}}, 5, 8, 70},
  414.   /*
  415.     pattern 28:
  416.     214    block near corner
  417.     304
  418.     444
  419.     */
  420.   {{{0, 0, 2},
  421.     {1, 0, 1},
  422.     {2, 0, EDGE},
  423.     {0, 1, MOVE},
  424.     {1, 1, EMPTY},
  425.     {2, 1, EDGE},
  426.     {0, 2, EDGE},
  427.     {1, 2, EDGE},
  428.     {2, 2, EDGE}}, 9, 8, 82},
  429.   /*
  430.     pattern 29:
  431.     214    block near edge ???
  432.     214
  433.     834
  434.     */
  435.   {{{0, 0, 2},
  436.     {1, 0, 1},
  437.     {2, 0, EDGE},
  438.     {0, 1, 2},
  439.     {1, 1, 1},
  440.     {2, 1, EDGE},
  441.     {0, 2, 8},        /* not you piece */
  442.     {1, 2, MOVE},
  443.     {2, 2, EDGE}}, 9, 8, 79},
  444.   /*
  445.     pattern 30:
  446.     231        prevent a cut from isolating a stone
  447.     120
  448.      07
  449.     */
  450.   {{{0, 0, 2},
  451.     {1, 0, MOVE},
  452.     {2, 0, 1},
  453.     {0, 1, 1},
  454.     {1, 1, 2},
  455.     {2, 1, 0},
  456.     {1, 2, 0},
  457.     {2, 2, 7}}, 7, 8, 82},
  458.   /*
  459.     pattern 31:
  460.     010        defend a gap ??? ???
  461.     3200
  462.     010
  463.     */
  464.   {{{-1, -1, 0},
  465.     {0, -1, 1},
  466.     {1, -1, 0},
  467.     {-1, 0, MOVE},
  468.     {0, 0, 2},
  469.     {1, 0, 0},
  470.     {2, 0, 0},
  471.     {-1, 1, 0},
  472.     {0, 1, 1},
  473.     {1, 1, 0}}, 10, 4, 79}
  474. };
  475.  
  476. /* att = 0 - empty, 1 - your piece, 2 - my piece, 3 - my next move */
  477. /* 4 - empty on edge, 5 - your piece on edge, 6 - my piece on edge */
  478. /* 7 - not my piece, 8 - not your piece */
  479. /* end patterns */
  480.